package com.xuecheng.content.controller;

import com.xuecheng.api.FileManagerApi;
import com.xuecheng.common.util.RandomStringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;


@RestController
public class FileManagerController implements FileManagerApi {


    @Autowired
    private RestTemplate restTemplate;

        /*
            * #文件系统微服的请求地址
               #七牛云配置
                #文件系统微服的请求地址
                file.service.url=http://127.0.0.1:56082
                #文件存储空间名称
                file.service.bucket= 8888888888888
                #文件存储区域的地址
                file.service.upload.region = http://upload.qiniu.com
                #文件访问的cdn加速域名
                cdn.domain = qvz1xudd3.hd-bkt.clouddn.com
            * */

        @Value("${file.service.url}")
        private String url;
        @Value("${file.service.bucket}")
        private String bucket;
        @Value("${file.service.upload.region}")
        private String region;
        @Value("${cdn.domain}")
        private String domain;


        @GetMapping("common/qnUploadToken")
        public Map<String, Object> qiniuUploadToken() {

            // 发送http请求获得前端上传文件的凭证
            // 1.请求的路径地址
            String uploadUrl = url + "/farming/generatetoken?origin=qiniu";

            // 2.请求体中的参数Map
            //构建请求体的JSON数据
            HashMap<String, Object> map = new HashMap<>();
            map.put("tokenType", "1");
            map.put("scope", bucket);
            map.put("deadline", 3600);

            //七牛云上传图片需要唯一的key
            String key = UUID.randomUUID().toString() + RandomStringUtil.getRandomString(80);

            map.put("key",key);

        /*
         * postForEntity：发送post请求，并使用ResponseEntity来封装结果数据
         *   参数：
         *       1.请求的路径地址
         *          http的Api路径接口地址
         *       2.请求体中的参数Map
         *       3.返回的类型Map封装
         *       4.queryString的参数（可变参数）
         *
         * */
            ResponseEntity<Map> responseEntity = restTemplate.postForEntity(uploadUrl, map, Map.class);

            Map body = responseEntity.getBody();

            Object token = body.get("result");

            map.put("qnToken",token);
            map.put("up_region",region);
            map.put("domain",domain);

            // 3.返回结果数据

        return map;
    }
}